package com.example.demo.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @Description PoxyUntil
 * @Author songchuanlong
 * @Date 2025-06-12
 */
public class PoxyUntil {
//    newProxyInstance(ClassLoader loader,
//                     Class<?>[] interfaces,
//                     InvocationHandler h)
//    参数1：用于指定一个类加载器
//    参数2：指定生成的代理长什么样子，也就是有哪些方法
//    参数3：用来指定生成的代理对象要干什么事情
    public static Star creatPoxy(BigStar bigStar){
//        Star starPoxy = (Star) Proxy.newProxyInstance(PoxyUntil.class.getClassLoader(),
//                new Class[]{Star.class},
//                new InvocationHandler() {
//                    @Override//回调方法
//                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//                        if (method.getName().equals("sing")) {
//                            System.out.println("准备话筒，收钱20万");
//                        } else {
//                            System.out.println("准备场地，收费1000万");
//                        }
//                        return method.invoke(bigStar, args);
//                    }
//                });
//        return starPoxy;


       return  (Star) Proxy.newProxyInstance(PoxyUntil.class.getClassLoader(),
                new Class[]{Star.class},
                new InvocationHandler() {
                    @Override//回调方法
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        if (method.getName().equals("sing")) {
                            System.out.println("准备话筒，收钱20万");
                        } else {
                            System.out.println("准备场地，收费1000万");
                        }
                        return method.invoke(bigStar, args);
                    }
                });
    }
}
